package com.zjsru.plan2024.oneday;

/**
 * 1702. 修改后的最大二进制字符串
 * @Author: cookLee
 * @Date: 2024-04-10
 */
public class MaximumBinaryString {

    /**
     * 主
     * 操作 1 ：如果二进制串包含子字符串 "00" ，你可以用 "10" 将其替换。
     * 比方说， "00010" -> "10010"
     * 操作 2 ：如果二进制串包含子字符串 "10" ，你可以用 "01" 将其替换。
     * 比方说， "00010" -> "00001"
     * \
     * 输入：binary = "000110"
     * 输出："111011"
     * 解释：一个可行的转换为：
     * "000110" -> "000101"
     * "000101" -> "100101"
     * "100101" -> "110101"
     * "110101" -> "110011"
     * "110011" -> "111011"
     * \
     * @param args args
     */
    public static void main(String[] args) {
        MaximumBinaryString maximumBinaryString = new MaximumBinaryString();
        String binary = "00010";
        System.out.println(maximumBinaryString.maximumBinaryString(binary));
    }

    /**
     * 最大二进制字符串:模拟+贪心
     *
     * @param binary 二进制
     * @return {@link String}
     */
    public String maximumBinaryString(String binary) {
        int len = binary.length();
        char[] chars = binary.toCharArray();
        int j = 0;
        for (int i = 0; i < len; i++) {
            //如果为0则变成1
            if (chars[i] == '0') {
                //利用操作 2 （示例）我们可以使得这两个 0 相邻，再使用操作 1（示例） 使得 00 变成 10
                while (j <= i || (j < len && chars[j] == '1')) {
                    j++;
                }
                if (j < len) {
                    chars[j] = '1';
                    chars[i] = '1';
                    chars[i + 1] = '0';
                }
            }
        }
        return new String(chars);
    }

}
